home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / PET / S-Super PET / (s)t4.d64 / CONCENTRATE.BAS < prev    next >
BASIC Source File  |  2009-01-18  |  8KB  |  237 lines

  1.   100 ! Concentration
  2.   200 ! Written by: J.B.Schueler and B.J.Stecher,
  3.   300 !             Waterloo Computing Systems Limited (WATCOM),
  4.   400 !             415 Phillip St.,
  5.   500 !             Waterloo, Ontario, Canada     N2L 3E9
  6.   600 option base 1
  7.   700 randomize 
  8.   800 dim doors%(25),items$(13),match%(25),memory%(25)
  9.  1000 print chr$(12);
  10.  1100 print "             Welcome to WATSoft's game of"
  11.  1200 call dis(".----------+----------+----------+----------+----------.")
  12.  1300 call dis("|1         |2         |3         |4         |5         |")
  13.  1400 call dis("|          |          |          |          |          |")
  14.  1500 call dis("|          |          |          |          |          |")
  15.  1600 call dis("+----------+----------+----------+----------+----------+")
  16.  1700 call dis("|6         |7         |8         |9         |10        |")
  17.  1800 call dis("|          |          |          |          |          |")
  18.  1900 call dis("|          |          |          |          |          |")
  19.  2000 call dis("+----------+----------+----------+----------+----------+")
  20.  2100 call dis("|11        |12        |13        |14        |15        |")
  21.  2200 call dis("|          |          |          |          |          |")
  22.  2300 call dis("|          |          |          |          |          |")
  23.  2400 call dis("+----------+----------+----------+----------+----------+")
  24.  2500 call dis("|16        |17        |18        |19        |20        |")
  25.  2600 call dis("|          |          |          |          |          |")
  26.  2700 call dis("|          |          |          |          |          |")
  27.  2800 call dis("+----------+----------+----------+----------+----------+")
  28.  2900 call dis("|21        |22        |23        |24        |25        |")
  29.  3000 call dis("|          |          |          |          |          |")
  30.  3100 call dis("|          |          |          |          |          |")
  31.  3200 call dis(".----------+----------+----------+----------+----------.")
  32.  3300 proc dis(x$)
  33.  3400   print x$
  34.  3500 endproc 
  35.  3600 print "                CONCENTRATION"
  36.  3700 x=cursor( 2*80-22 )
  37.  3800 print "Match pairs of hidden"
  38.  3900 x=cursor(3*80-22)
  39.  4000 print "items by choosing two"
  40.  4100 x=cursor(4*80-22)
  41.  4200 print "door numbers. What lies"
  42.  4300 x=cursor(5*80-22)
  43.  4400 print "behind each door will"
  44.  4500 x=cursor(6*80-22)
  45.  4600 print "be revealed to you. Try"
  46.  4700 x=cursor(7*80-22)
  47.  4800 print "to remember what is"
  48.  4900 x=cursor(8*80-22)
  49.  5000 print "behind each door. Find"
  50.  5100 x=cursor(9*80-22)
  51.  5200 print "more items than the"
  52.  5300 x=cursor(10*80-22)
  53.  5400 print "computer to win."
  54.  5500 mat read items$
  55.  5600 for i%=1 to 24
  56.  5700   doors%(i%)=1+mod(i%,12)
  57.  5800 next i%
  58.  5900 computer_wins = 0
  59.  6000 player_wins = 0
  60.  6100 x=cursor(23*80-20)
  61.  6200 print "ME";computer_wins;"     YOU";player_wins
  62.  6300 doors%(i%)=13
  63.  6400 for i%=1 to 25
  64.  6500   exch%=rnd*25+1
  65.  6600   temp%=doors%(exch%)
  66.  6700   doors%(exch%)=doors%(i%)
  67.  6800   doors%(i%)=temp%
  68.  6900   match%(i%)=0
  69.  7000   memory%(i%)=0
  70.  7100 next i%
  71.  7200 x=cursor(18*80-22)
  72.  7300 input "Start? ",reply$
  73.  7400 if reply$(1:1)="n" then goto 23700
  74.  7500 loop 
  75.  7600   call computer_turn
  76.  7700   if computer_wins > 6 then quit 
  77.  7800   call player_turn
  78.  7900   if player_wins > 6 then quit 
  79.  8000 endloop 
  80.  8100 x=cursor(1)
  81.  8200 for i%=1 to 25
  82.  8400   call open_door(i%)
  83.  8500 next i%
  84.  8600 call sleep(20)
  85.  8700 for i%=1 to 25
  86.  8800   call close_door(i%)
  87.  8900 next i%
  88.  9000 x=cursor(18*80-22)
  89.  9100 print chr$(6)
  90.  9200 goto 5600
  91.  9300 proc computer_turn
  92.  9400   x=cursor(23*80-20)
  93.  9500   print "ME"
  94.  9600   if player_wins+computer_wins < 12
  95.  9700     call guess_door
  96.  9800     call check_doors
  97.  9900   else 
  98. 10000     win%=1
  99. 10100   endif 
  100. 10200   computer_wins = computer_wins + win%
  101. 10300   x=cursor(23*80-20)
  102. 10400   print "ME";computer_wins;
  103. 10500 endproc 
  104. 10600 proc guess_door
  105. 10700   guess 
  106. 10800     door1% = 0
  107. 10900     door2% = 0
  108. 11000     call match_look
  109. 11100     if door1% <> 0 then quit 
  110. 11200     door1% = fnpick_door%
  111. 11300     call match_look
  112. 11400     if door2% <> 0 then quit 
  113. 11500     door2% = fnpick_door%
  114. 11600   endguess 
  115. 11700   x=cursor(12*80-22)
  116. 11800   print "DOOR? ";door1%;chr$(6)
  117. 11900   x=cursor(14*80-21)
  118. 12000   print "and"
  119. 12100   x=cursor(16*80-22)
  120. 12200   print "DOOR? ";door2%;chr$(6)
  121. 12300   call open_door( door1% )
  122. 12400   call open_door( door2% )
  123. 12500 endproc 
  124. 12600 proc match_look
  125. 12700   for i% = 1 to 24
  126. 12800     if match%( i% ) = 0 and memory%( i% ) <> 0
  127. 12900       for j% = i% + 1 to 25
  128. 13000         if match%( j% ) = 0
  129. 13100           if memory%( i% ) = memory%( j% )
  130. 13200             door1% = i%
  131. 13300             door2% = j%
  132. 13400             goto 14000
  133. 13500           endif 
  134. 13600         endif 
  135. 13700       next j%
  136. 13800     endif 
  137. 13900   next i%
  138. 14000 endproc 
  139. 14100 def fnpick_door%
  140. 14200   for i% = 1 to 25
  141. 14300     if match%( i% ) = 0 and memory%( i% ) = 0 then quit 
  142. 14400   next i%
  143. 14500   memory%( i% ) = doors%( i% )
  144. 14600   fnpick_door% = i%
  145. 14700 fnend 
  146. 14800 proc player_turn
  147. 14900   x=cursor(23*80-10)
  148. 15000   print "YOU"
  149. 15100   if player_wins+computer_wins < 12
  150. 15200     call select_door
  151. 15300     call check_doors
  152. 15400   else 
  153. 15500     win% = 1
  154. 15600   endif 
  155. 15700   player_wins = player_wins + win%
  156. 15800   x=cursor(23*80-10)
  157. 15900   print "YOU";player_wins;
  158. 16000 endproc 
  159. 16100 proc select_door
  160. 16200   on conv 
  161. 16300     conv%=1
  162. 16400     resume next 
  163. 16500   endon 
  164. 16600   x=cursor(12*80-15)
  165. 16700   print chr$(6)
  166. 16800   x=cursor(16*80-15)
  167. 16900   print chr$(6)
  168. 17000   loop 
  169. 17100     x=cursor(12*80-22)
  170. 17200     print "DOOR? ";chr$(6);
  171. 17300     conv%=0
  172. 17400     input "",door1%
  173. 17500     if conv% = 1 then goto 17100
  174. 17600     if door1% > 25 then goto 17100
  175. 17700     if match%( door1% ) = 0 then quit 
  176. 17800     x=cursor(13*80-22)
  177. 17900     print "Try a closed door"
  178. 18000   endloop 
  179. 18100   x=cursor(13*80-22)
  180. 18200   print chr$(6)
  181. 18300   call open_door( door1% )
  182. 18400   x=cursor(14*80-21)
  183. 18500   print "and"
  184. 18600   loop 
  185. 18700     x=cursor(16*80-22)
  186. 18800     print "DOOR? ";chr$(6);
  187. 18900     conv% = 0
  188. 19000     input "",door2%
  189. 19100     if conv% = 1 then goto 18700
  190. 19200     if door2% > 25 then goto 18700
  191. 19300     if match%( door2% ) = 0 and door1% <> door2% then quit 
  192. 19400     x=cursor(17*80-22)
  193. 19500     print "Try a closed door"
  194. 19600   endloop 
  195. 19700   x=cursor(17*80-22)
  196. 19800   print chr$(6)
  197. 19900   call open_door( door2% )
  198. 20000   memory%( door1% ) = doors%( door1% )
  199. 20100   memory%( door2% ) = doors%( door2% )
  200. 20200 endproc 
  201. 20300 proc check_doors
  202. 20400   guess 
  203. 20500     if doors%( door1% ) = doors%( door2% ) then quit 
  204. 20600     if doors%( door1% ) = 13 then quit 
  205. 20700     if doors%( door2% ) = 13 then quit 
  206. 20800     call sleep( 5 )
  207. 20900     call close_door( door1%)
  208. 21000     call close_door( door2%)
  209. 21100     win% = 0
  210. 21200   admit 
  211. 21300     match%( door1% ) = 1
  212. 21400     match%( door2% ) = 1
  213. 21500     win% = 1
  214. 21600   endguess 
  215. 21700 endproc 
  216. 21800 proc open_door( door% )
  217. 21900   row%=int((door%-1)/5) * 4 + 3
  218. 22000   col%=( mod(door%-1,5) ) * 11 + 2
  219. 22100   x=cursor( row%*80+col% )
  220. 22200   print items$( doors%(door%) )
  221. 22300 endproc 
  222. 22400 proc close_door( door% )
  223. 22500   row%=int((door%-1)/5) * 4 + 3
  224. 22600   col%=( mod(door%-1,5) ) * 11 + 2
  225. 22700   x=cursor( row%*80+col% )
  226. 22800   print "          "
  227. 22900 endproc 
  228. 23000 proc sleep( amount )
  229. 23100   for i=1 to amount * 350
  230. 23200   next i
  231. 23300 endproc 
  232. 23400 data "WATSoft","WATCOM","ECOO","M6809","micro"
  233. 23500 data "BASIC","FORTRAN","APL","Pascal","COBOL","Assembler","Linker"
  234. 23600 data "* Wild *"
  235. 23700 x=cursor(21*80+1)
  236. 23900 end 
  237.